package com.cms.juc;

import java.util.concurrent.Callable;
import java.util.concurrent.ExecutionException;
import java.util.concurrent.FutureTask;
import java.util.concurrent.TimeUnit;

public class CallableDemo {

    public static void main(String[] args) throws ExecutionException, InterruptedException {

        /*
         * 1 get方法一般放到最后一行
         * 2
         *
         *
         *
         *
         *
         */

        // FutureTask
        // 一个FutureTask同样的对象只会调用一次，不管几个线程调用
        FutureTask<Integer> futureTask = new FutureTask<>(new MyThread());
        new Thread(futureTask, "A").start();
        new Thread(futureTask, "B").start();
        System.out.println("1526456415634653");
        Integer result = futureTask.get();


        System.out.println(result);
    }
}

class MyThread implements Callable<Integer> {

    @Override
    public Integer call() throws Exception {
        System.out.println("---------------");
        TimeUnit.SECONDS.sleep(4);
        return 1024;
    }
}

class MyThread2 implements Runnable {

    @Override
    public void run() {

    }
}

// 1.实现的接口不同，一个是run，一个是call
// 2.一个没有异常，一个有异常
// 3.一个有返回值，一个没有